/**
 * 文件名：@UseDataSourceClassOrMethodAdvisor.java <br/>
 * 包名：cn.efunbox.afw.data.datasource.dynamic <br/>
 * 项目名：afw-data <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.data.datasource.dynamic;

import java.lang.reflect.Method;

import org.springframework.aop.Pointcut;
import org.springframework.core.annotation.AnnotationUtils;

/**
 * 类名：UseDataSourceClassOrMethodAdvisor  <br />
 *
 * 功能：该实现会拦截所有的类，并提取方法上或类上的注解定义，【请谨慎使用】
 *
 * @author xtwin <br />
 * 创建时间：2016年7月31日 下午3:51:58  <br />
 * @version 2016年7月31日
 */
public class UseDataSourceClassOrMethodAdvisor extends AbstractUseDataSourceAdvisor {

	/** add by xtwin 2016年7月31日 下午3:53:08 */
	private static final long serialVersionUID = 7386593323281473365L;

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月31日 下午3:53:04<br/>
	 * 
	 * @return <br/>
	 * @see org.springframework.aop.PointcutAdvisor#getPointcut()
	 */
	@Override
	public Pointcut getPointcut() {
		// 拦截所有bean
		return Pointcut.TRUE;
	}

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月31日 下午3:53:04<br/>
	 * 
	 * @param method
	 * @param clazz
	 * @return <br/>
	 * @see cn.efunbox.afw.data.datasource.dynamic.AbstractUseDataSourceAdvisor#findAnnotation(java.lang.reflect.Method, java.lang.Class)
	 */
	@Override
	protected UseDataSource findAnnotation(Method method, Class<?> clazz) {
		// 优先查找当前方法上的定义
		UseDataSource ds = AnnotationUtils.findAnnotation(method, UseDataSource.class);
		
		// 方法上没有定义，则查找类上是否有定义
		if (null == ds) {
			ds = AnnotationUtils.findAnnotation(clazz, UseDataSource.class);
		}
		
		// 返回结果
		return ds;
	}
}




















